package com.andnux.android.network;


import com.andnux.android.data.ChatMessage;
import com.andnux.android.data.ChatSession;
import com.andnux.android.data.Orders;
import com.andnux.android.data.OrdersComment;
import com.andnux.android.data.PageData;
import com.andnux.android.data.SystemUsers;
import com.andnux.android.data.Works;

import java.util.List;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * 设计云API
 */
public interface DesignCloudApi {

    /**
     * 登录
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/user/login")
    Observable<Result<SystemUsers>> userLogin(@Body SystemUsers vo);


    /**
     * 注册
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/user/register")
    Observable<Result<SystemUsers>> userRegister(@Body SystemUsers vo);

    /**
     * 注册
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/user/save")
    Observable<Result<Boolean>> userSave(@Body SystemUsers vo);


    /**
     * 注册
     *
     * @param current
     * @param size
     * @return
     */
    @GET("/design-cloud/works/page")
    Observable<Result<PageData<List<Works>>>> worksPage(@Query("current") int current,
                                                        @Query("size") int size,
                                                        @Query("lx") String lx,
                                                        @Query("title") String title,
                                                        @Query("userId") String userId,
                                                        @Query("status") Integer status
    );


    /**
     * 发布作品
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/works/save")
    Observable<Result<Works>> worksSave(@Body Works vo);


    /**
     * 发布作品
     *
     * @param id
     * @return
     */
    @GET("/design-cloud/works/views")
    Observable<Result<Works>> worksViews(@Query("id") Long id);


    /**
     * 作品详情
     *
     * @param id
     * @return
     */
    @GET("/design-cloud/works/detail")
    Observable<Result<Works>> worksDetail(@Query("id") Long id);


    /**
     * 上传文件
     *
     * @param file
     * @return
     */
    @Multipart
    @POST("/design-cloud/file/upload")
    Observable<Result<String>> fileUpload(@Part List<MultipartBody.Part> file);

    /**
     * 下载文件
     *
     * @param path
     * @return
     */
    @Multipart
    @GET("/design-cloud/file/download")
    Observable<ResponseBody> fileDownload(@Query("path") String path);


    /**
     * 分页获取会话消息
     *
     * @param current
     * @param size
     * @return
     */
    @GET("/design-cloud/chat/session/page")
    Observable<Result<PageData<List<ChatSession>>>> chatSessionPage(@Query("current") int current,
                                                                    @Query("size") int size,
                                                                    @Query("userId") String userId,
                                                                    @Query("worksId") String worksId
    );

    /**
     * 新增获取会话消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/chat/session/insert")
    Observable<Result<String>> chatSessionInsert(@Body ChatSession vo);

    /**
     * 删除获取会话消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/chat/session/delete")
    Observable<Result<ChatSession>> chatSessionDelete(@Body ChatSession vo);

    /**
     * 分页获取会话消息
     *
     * @param current
     * @param size
     * @return
     */
    @GET("/design-cloud/chat/message/page")
    Observable<Result<PageData<List<ChatMessage>>>> chatMessagePage(@Query("current") int current,
                                                                    @Query("size") int size,
                                                                    @Query("userId") String userId,
                                                                    @Query("worksId") String worksId,
                                                                    @Query("chatSessionId") String chatSessionId
    );


    /**
     * 保存消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/chat/message/insert")
    Observable<Result<Integer>> chatMessageInsert(@Body ChatMessage vo);

    /**
     * 保存消息
     *
     * @param idList
     * @return
     */
    @POST("/design-cloud/chat/message/read")
    Observable<Result<Integer>> chatMessageRead(@Body List<String> idList);


    /**
     * 分页获取订单消息
     *
     * @param current
     * @param size
     * @return
     */
    @GET("/design-cloud/order/page")
    Observable<Result<PageData<List<Orders>>>> orderPage(@Query("current") int current,
                                                         @Query("size") int size,
                                                         @Query("status") Integer status
    );

    /**
     * 保存订单消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/order/insert")
    Observable<Result<Orders>> orderInsert(@Body Orders vo);


    /**
     * 保存订单消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/order/update")
    Observable<Result<Orders>> orderUpdate(@Body Orders vo);


    /**
     * 保存订单评论消息
     *
     * @param vo
     * @return
     */
    @POST("/design-cloud/order/comment/insert")
    Observable<Result<OrdersComment>> orderCommentInsert(@Body OrdersComment vo);


    /**
     * 获取订单评论消息
     *
     * @param current
     * @param size
     * @param worksId
     * @return
     */
    @GET("/design-cloud/order/comment/page")
    Observable<Result<PageData<List<OrdersComment>>>> orderCommentPage(@Query("current") int current,
                                                                       @Query("size") int size,
                                                                       @Query("worksId") Long worksId
    );

}
